Scalable and flexible internet fax architecture for processing outbound fax messages

ABSTRACT

Methods and systems for processing outbound fax messages in an efficient and scalable manner are provided. According to one embodiment, a request to deliver a fax message is received by an Internet fax system. Source files associated with the request and representing at least a portion of content to be included as part of the fax message are stored to a shared storage area accessible by multiple imaging systems and multiple fax processing resources. A load score is calculated for each imaging system based on one or more of a processor load and a memory load. An imaging system is selected, based on the load scores, to convert the source files into a digital representation suitable for faxing. The source files are converted by associating the digital representation with an outbound fax job. The fax message is delivered by submitting the outbound fax job to one of the fax modems.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.13/565,424, filed on Aug. 2, 2012, which is a continuation of U.S.patent application Ser. No. 13/405,614, filed on Feb. 27, 2012, now U.S.Pat. No. 8,254,538, both of which are hereby incorporated by referencein their entirety for all purposes.

COPYRIGHT NOTICE

Contained herein is material that is subject to copyright protection.The copyright owner has no objection to the facsimile reproduction ofthe patent disclosure by any person as it appears in the Patent andTrademark Office patent files or records, but otherwise reserves allrights to the copyright whatsoever. Copyright© 2012-2013, EC DataSystems Inc.

BACKGROUND

1. Field

Embodiments of the present invention generally relate to receivingdocuments via email, website and/or custom application programminginterface (API) integration, creating corresponding outbound fax jobsand transmitting the outbound fax jobs to the specified destinations. Inparticular, embodiments of the present invention relate to an improvedInternet fax architecture designed for scalability, flexibility andefficient outbound facsimile processing that, among other things,implements a centralized message/work queue within a database, animaging system load-notification system, a fair queuing system to ensuresubscribers have equal access to imaging systems, an outbound resourceselection algorithm based on the customer's subscribed capacity and amass fax interface capability.

2. Description of the Related Art

Existing Internet fax systems have numerous limitations in terms of thescalability and flexibility of their architectures and user-facingflexibility. Existing Internet fax systems have no mechanism to identifyimage processing resources that are most capable of processing new workand instead rely on a simplistic first-in-first-out (FIFO) methodologyto assign outgoing fax requests. While such a FIFO approach is easy toimplement, it sacrifices efficiency in connection with image processingresource utilization and can create bottlenecks in outbound faxprocessing.

Furthermore, the user-facing inflexibility exhibited by existingInternet fax systems results in part from an underlying assumption thata single outbound fax job is associated with a single destination. Assuch, when a single fax containing the same content is desired to besent to multiple destinations, customers must submit the fax to theInternet fax system for each destination.

In view of the foregoing and numerous other limitations associated withexisting Internet fax systems, a more efficient and flexiblearchitecture that better suits the needs of corporate users is needed.

SUMMARY

Methods and systems are described for processing outbound fax messagesin an efficient and scalable manner. According to one embodiment, arequest to deliver a fax message to one or more third parties isreceived at an initial submission gateway device of an Internet faxsystem. One or more source files associated with the request andrepresenting at least a portion of content to be included as part of thefax message is stored to a shared storage area of the Internet faxsystem accessible by multiple imaging systems and multiple faxprocessing resources of the Internet fax system. A load score iscalculated for each imaging system based on one or more of a processorload associated with the imaging system and a memory load associatedwith the imaging system. One of the imaging systems is selected, basedon the load scores, to convert the one or more source files into adigital representation suitable for faxing. The one or more source filesare converted into the digital representation by the selected imagingsystem by associating the digital representation with an outbound faxjob. The fax message is delivered to the one or more third parties bysubmitting the outbound fax job to one of the fax modems.

Other features of embodiments of the present invention will be apparentfrom the accompanying drawings and from the detailed description thatfollows.

BRIEF DESCRIPTION OF THE DRAWINGS

Embodiments of the present invention are illustrated by way of example,and not by way of limitation, in the figures of the accompanyingdrawings and in which like reference numerals refer to similar elementsand in which:

FIG. 1 is a context level diagram illustrating external actors that mayinteract with an Internet fax system in accordance with an embodiment ofthe present invention.

FIG. 2 is a system level block diagram conceptually illustrating anarchitecture of an Internet fax system in accordance with an embodimentof the present invention.

FIG. 3 is an example of a computer system with which embodiments of thepresent invention may be utilized.

FIG. 4 is a high-level flowchart illustrating outbound fax processing inaccordance with an embodiment of the present invention.

FIG. 5 is a flowchart illustrating email gateway processing inaccordance with an embodiment of the present invention.

FIG. 6 is a flowchart illustrating web gateway processing in accordancewith an embodiment of the present invention.

FIG. 7 is a flowchart illustrating web services processing in accordancewith an embodiment of the present invention.

FIG. 8 is a flowchart illustrating imaging system selection processingin accordance with an embodiment of the present invention.

FIG. 9 is a flowchart illustrating imaging system work selection inaccordance with an embodiment of the present invention.

FIG. 10 is a flowchart illustrating load score calculation processing inaccordance with an embodiment of the present invention.

FIG. 11 is a flowchart illustrating imaging system work processing inaccordance with an embodiment of the present invention.

FIG. 12 is a flowchart illustrating fax server send fax processing inaccordance with an embodiment of the present invention.

FIG. 13 is a flowchart illustrating private branch exchange (PBX) callprocessing in accordance with an embodiment of the present invention.

FIG. 14 is a flowchart illustrating switch route call processing inaccordance with an embodiment of the present invention.

FIG. 15 is a flowchart illustrating call accounting processing inaccordance with an embodiment of the present invention.

FIG. 16 is a flowchart illustrating email notification processing inaccordance with an embodiment of the present invention.

DETAILED DESCRIPTION

Methods and systems are described for processing outbound fax messagesin an efficient and scalable manner. According to embodiments of thepresent invention, an improved Internet fax architecture is providedthat is designed for scalability, flexibility and efficient outboundfacsimile processing that, among other things, implements a centralizedmessage queue within a database, an imaging system load-notificationsystem, a fair queuing system to ensure subscribers have equal access toimaging systems, an outbound resource selection algorithm based on thecustomer's subscribed capacity and a mass fax interface capability.

In the following description, numerous specific details are set forth inorder to provide a thorough understanding of embodiments of the presentinvention. It will be apparent, however, to one skilled in the art thatembodiments of the present invention may be practiced without some ofthese specific details. In other instances, well-known structures anddevices are shown in block diagram form.

Embodiments of the present invention include various steps, which willbe described below. The steps may be performed by hardware components ormay be embodied in machine-executable instructions, which may be used tocause a general-purpose or special-purpose processor programmed with theinstructions to perform the steps. Alternatively, the steps may beperformed by a combination of hardware, software, firmware and/or byhuman operators.

Embodiments of the present invention may be provided as a computerprogram product, which may include a machine-readable storage mediumtangibly embodying thereon instructions, which may be used to program acomputer (or other electronic devices) to perform a process. Themachine-readable medium may include, but is not limited to, fixed (hard)drives, magnetic tape, floppy diskettes, optical disks, compact discread-only memories (CD-ROMs), and magneto-optical disks, semiconductormemories, such as ROMs, PROMs, random access memories (RAMs),programmable read-only memories (PROMs), erasable PROMs (EPROMs),electrically erasable PROMs (EEPROMs), flash memory, magnetic or opticalcards, or other type of media/machine-readable medium suitable forstoring electronic instructions (e.g., computer programming code, suchas software or firmware). Moreover, embodiments of the present inventionmay also be downloaded as one or more computer program products, whereinthe program may be transferred from a remote computer to a requestingcomputer by way of data signals embodied in a carrier wave or otherpropagation medium via a communication link (e.g., a modem or networkconnection).

In various embodiments, the article(s) of manufacture (e.g., thecomputer program products) containing the computer programming code maybe used by executing the code directly from the machine-readable storagemedium or by copying the code from the machine-readable storage mediuminto another machine-readable storage medium (e.g., a hard disk, RAM,etc.) or by transmitting the code on a network for remote execution.Various methods described herein may be practiced by combining one ormore machine-readable storage media containing the code according to thepresent invention with appropriate standard computer hardware to executethe code contained therein. An apparatus for practicing variousembodiments of the present invention may involve one or more computers(or one or more processors within a single computer) and storage systemscontaining or having network access to computer program(s) coded inaccordance with various methods described herein, and the method stepsof the invention could be accomplished by modules, routines,subroutines, or subparts of a computer program product.

For simplicity and sake of brevity, various embodiments described hereinfocus on outbound fax processing and delivery of received documents inthe form of fax messages to one or more destinations specified bysubscribers; however, it is to be noted that the Internet fax system mayalso be capable of facilitating receipt of inbound fax messages onbehalf of subscribers as well.

Notably, while embodiments of the present invention may be describedusing modular programming terminology, the code implementing variousembodiments of the present invention is not so limited. For example, thecode may reflect other programming paradigms and/or styles, including,but not limited to object-oriented programming (OOP), agent orientedprogramming, aspect-oriented programming, attribute-oriented programming(@OP), automatic programming, dataflow programming, declarativeprogramming, functional programming, event-driven programming, featureoriented programming, imperative programming, semantic-orientedprogramming, functional programming, genetic programming, logicprogramming, pattern matching programming and the like.

TERMINOLOGY

Brief definitions of terms used throughout this application are givenbelow.

The terms “connected” or “coupled” and related terms are used in anoperational sense and are not necessarily limited to a direct connectionor coupling.

The phrases “facsimile call” or “fax call” generally refer to a callcarried over a circuit-switched network (e.g., the public switchedtelephone network (PSTN)) or a VoIP call carried over a packet-switchednetwork (e.g., the Internet) from a device intending to transmit afacsimile to a particular destination phone number.

The phrases “facsimile processing resource” and “fax processingresource” generally refer to a device capable of making a facsimilecall, establishing a facsimile protocol communication with thedestination and transmitting facsimile data to the destination phonenumber. A non-limiting example of a facsimile processing resource is afax server or a subset of resources associated with a fax server.

The phrases “facsimile signal” or “fax signal” generally refer to adigital representation of audio information encoding a facsimilemessage. According to embodiments of the present invention, outbound faxsignals may be transmitted over a circuit-switched network (e.g., thepublic telephone network) or a packet-switched network (e.g., theInternet via Voice over Internet Protocol (VoIP)).

The phrases “in one embodiment,” “according to one embodiment,” and thelike generally mean the particular feature, structure, or characteristicfollowing the phrase is included in at least one embodiment of thepresent invention, and may be included in more than one embodiment ofthe present invention. Importantly, such phases do not necessarily referto the same embodiment.

If the specification states a component or feature “may”, “can”,“could”, or “might” be included or have a characteristic, thatparticular component or feature is not required to be included or havethe characteristic.

The term “responsive” includes completely or partially responsive.

FIG. 1 is a context level diagram illustrating external actors that mayinteract with an Internet fax system in accordance with an embodiment ofthe present invention. In embodiments of the present invention, Internetfax system 100 allows users associated with a subscriber account to sendfax messages without necessarily owning a fax machine via a web site,email to fax and/or application programming interface (API) fax methods.Embodiments of the present invention support a multi-user system wherethe subscriber may be, but is not assumed to be an individual user andis typically an organization having 1 to n users.

Each subscriber account may have one or more users and one or moreassociated fax numbers. According to one embodiment, flexibleconfiguration settings allow do not fax settings, image resolutionsettings, notification settings, caller ID settings, tagline settings,time zone settings and retry settings at a subscriber, user or job-levelas appropriate. For purposes of efficiency, defaults may be establishedat an account level and overridden, if desired, at the user level. Forexample, all outbound faxes from a particular subscriber may beconfigured to include a particular tagline, use a certain time zone whenprinting the date/time in the tagline and perform a particular number ofretries. Meanwhile, users at different geographical locations mayoverride the time zone setting and/or number of retries. Similarly, bydefault all faxes transmitted by a subscribing enterprise may beconfigured to image the tagged image file format (TIFF) outbound fax jobat a certain resolution on a per-account basis (e.g., fine, hyperfine,low/normal); however, a particular user may override the default basedon his/her personal tradeoff preferences between cost/time-to-transmitand quality of the image as transmitted.

Internet fax system 100 receives and processes requests to deliveroutbound fax message from an Internet fax system application programminginterface (API) 110 and/or users associated with subscribers, e.g.,Internet fax system user 120 (via an email or web interface), anddelivers fax messages to one or more destination phone numbersassociated with desired recipients, e.g., fax recipient 130. Anyone witha fax machine (subscriber or non-subscriber) can receive faxesoriginated by Internet fax system user 120. As described further below,embodiments of the present invention also allow for fax deliveryrequests and data store queries to be made via an API over HypertextTransport Protocol (HTTP) or HTTP secure (HTTPS) that allows programmersto build fax transmission capabilities into their applications.

According to the present example, Internet fax system 100 interfaceswith Internet fax system APIs, such as Internet fax system API 110,Internet fax system users associated with a subscriber account, such asInternet fax system user 120, and fax recipients, such as fax recipient130.

Internet fax system user 120 may communicate requests to deliveroutbound fax messages directed to one or more fax numbers via anyInternet connected device, such as computer 121, a smartphone (notshown) or the like. As described further below, Internet fax system user120 may provide content to be faxed in a variety of forms, includingemail attachments in the form of standard business documents (e.g.,Microsoft Word, PDF, etc.), links to web content and inline emailcontent (e.g., text, HTML and/or embedded images).

Fax recipient 130 may receive faxes from subscribers of Internet faxsystem 100 via a dedicated fax machine 132, computer 131,multifunction/all-in-one printer (not shown) or other fax-capable device(not shown) just as he/she would receive faxes from non-subscribers. Faxrecipient 130 may, but need not be a subscriber of Internet fax system100 to receive faxes from a subscriber, such as Internet fax system user120. If fax recipient 130 is a subscriber, then he/she may receive faxesas email attachments, as secure download links embedded within emailmessages or download them from a web site associated with Internet faxsystem 100 as described in copending U.S. patent application Ser. No.13/346,456, which is hereby incorporated by reference in its entiretyfor all purposes.

Internet fax system API 110 may represent a standardized API associatedwith Internet fax system 100 or a custom API developed to APIspecifications established by the owner/operator of Internet fax system100. Internet fax system API 110 may provide capabilities that anapplication programmer can use to integrate fax capabilities into theirapplications utilizing Internet fax system 100 as a backend, forexample. In one embodiment, the integration is accomplished via HTTP orHTTPS POST operations.

Depending upon the particular implementation, Internet fax system API110 may provide operations to support fax sending and receiving, calldetail record collection and automated number provisioning andde-provisioning. Additional details regarding an exemplary set ofoperations and related variables for an Internet fax system API aredescribed in the Appendix.

FIG. 2 is a system level block diagram conceptually illustrating anarchitecture of an Internet fax system in accordance with an embodimentof the present invention. According to the present example, Internet faxsystem 200 is coupled to one or more networks 210 (e.g., apacket-switched network, such as the Internet, and a circuit-switchednetwork, such as the public switched telephone network (PSTN)) throughwhich requests to deliver outbound fax messages may be received andthrough which outbound faxes may be delivered.

In the exemplary simplified architecture depicted, Internet fax system200 includes an email gateway 220, a Web gateway 230, an API gateway240, multiple imaging systems 250, a file store 260, a data store 265,one or more private branch exchanges (PBXs) 270, multiple fax processingresources 280 and one or more telecommunications systems 290interconnected via an appropriate telecommunications signaling networkand an Internet Protocol (IP) network.

According to one embodiment, email gateway 220 is operable to receiverequests to deliver outbound fax messages from subscribers. Responsiveto receipt of an email message email gateway 220 may parse the email todetermine the sender, the destination(s) and other optional parameters.In one embodiment, the email request may include one or more attachmentsrepresenting the content of the desired outbound fax message. In such anembodiment, email gateway 220 may strip the attachment(s) from the emailmessage and store the attachment(s) in file store 260. As describedfurther below, email gateway 220 may also determine the sender basedupon the email message and extract information regarding thedestination(s) and other parameters and store this information in datastore 265. According to one embodiment, if a system generated coversheet is set up, email gateway 220 may also generate and store a coversheet as another file for the fax job in the file store 260 and datastore 265. Once the fax content is ready to be processed, email gateway220 may store a work request in a centralized message/work queue (notshown) implemented within a database, such as data store 265. In someembodiments, rather than implementing a simplistic FIFO mechanism asdescribed by U.S. Pat. No. 6,597,688 and its progeny, a novel imagingsystem selection process is employed by email gateway 220 to identify aleast loaded imaging system of imaging systems 250 to process the faxcontent (e.g., convert to TIFF format, transform landscape to portrait,print HTML source to a PDF, etc.). According to one embodiment, after anappropriate imaging system has been selected to process the fax content,email gateway 220 assigns a corresponding work request to the selectedimaging system by placing a work request in the centralized message/workqueue within data store 265, for example, where the work requestcontains information identifying the selected imaging system that shouldprocess the fax content.

In one embodiment, the work request includes the following information:

-   -   Hostname—the hostname of the selected imaging system    -   Jobid—the unique job ID associated with the request in the        application-level database (e.g., data store 265)    -   Callerid—caller ID requested, if different than the default    -   Orgid—the unique id associated with the subscriber account

Web gateway 230 is operable to receive and process user requestsrelating to outbound faxes. For example, responsive to a user logginginto a web site (not shown) associated with Internet fax system 200 andnavigating to the transmit faxes page, the web site may present the userwith an interface to specify one or more destinations, uploaddocument(s) to send, create a cover sheet and specify other optionalparameters. After the information regarding the outbound fax deliveryrequest has been gathered from the user, web gateway 230 stores thedocument(s) to be faxed in file store 260, stores sender, destination(s)and any other parameters in data store 265 and stores a work request inthe centralized message/work queue. In some embodiments, web gateway 230may also perform the imaging system selection process to identify aleast loaded imaging system of imaging systems 250 to process the faxcontent. According to one embodiment, after an appropriate imagingsystem has been selected to process the fax content, web gateway 230assigns the work request to the selected imaging system as describedabove by placing the work request in the centralized message/work queueand including therein information identifying the selected imagingsystem (e.g., the hostname of the selected imaging system) that shouldprocess the fax content.

API gateway 240 supports API-based receipt of requests to deliveroutbound fax messages, wherein the interaction can be with a program ona user system. In this manner, API gateway 240 provides an alternativeto manual uploading of fax messages in contrast to existing Internet faxsystems, such as that described in U.S. Pat. No. 6,597,688 and itsprogeny. As described in further detail below, API gateway 240 processesAPI information to determine the sender, destination(s) and otheroptional parameters associated with requests to deliver outbound faxmessages. As indicated above with respect to email gateway 220 and webgateway 230, after the information regarding the outbound fax deliveryrequest has been gathered, API gateway 240 stores the document(s) to befaxed in file store 260, stores sender, destination(s) and any otherparameters in data store 265 and stores a work request in thecentralized message/work queue. In some embodiments, API gateway 240 mayalso perform the imaging system selection process to identify a leastloaded imaging system of imaging systems 250 to process the fax content.According to one embodiment, after an appropriate imaging system hasbeen selected to process the fax content, API gateway 240 assigns thework request to the selected imaging system as described above byplacing the work request in the centralized message/work queue andincluding therein information identifying the selected imaging system(e.g., the hostname of the selected imaging system) that should processthe fax content. Further details regarding an exemplary set ofoperations that may be automated via API gateway 240 are provided in theattached Appendix.

According to one embodiment, imaging systems 250 implement aload-notification system in which each imaging system periodically sendsload information to an image queue database within data store 265, forexample. As described in further detail below, the initial submissiondevice (e.g., email gateway 220, web gateway 230 or API gateway 240)runs an imaging system selection process to select an appropriateimaging system of imaging systems 250 based on the load informationreported by the imaging systems 250.

File store 280 represents a shared storage resource accessible by theinitial submission device (e.g., email gateway 220, web gateway 230 orAPI gateway 240), imaging systems 250 and fax processing resources 280for storing and accessing fax content in its source format and thecorresponding digital representations of fax messages based thereon.According to one embodiment, file store 260 is simply a disk with noprocessing other than storage access logic. According to one embodiment,file store 260 is a database implemented within a network attachedstorage (NAS) device, such as a NetApp NAS filer available from NetApp,Inc.

In one embodiment, data store 265 includes a centralized message/workqueue database for storing work requests for imaging systems 250 and aseparate application-level database that is operable to storeinformation specific to fax jobs (e.g., destination number(s),location(s) of file(s) that comprise the fax job, source user, useraccount configuration, etc.). Data store 265 may also represent storagefor accounting, billing, features and other metadata associated withoutbound fax messages. According to one embodiment, data store 265 is aSolaris x86-based workstation running an open source database, such asMySQL.

Embodiments of the present invention seek to provide redundancy andscalability based on an active-0/active-n setup of multiple faxprocessing resources, PBXs, etc. that are all essentially identical,such that a given fax processing resource does not have to be associatedwith a “backup” fax processing resource that is used if it goes down assuggested by prior Internet fax system architectures, such as thearchitecture described in U.S. Pat. No. 6,208,638. Instead, inaccordance with embodiments of the present invention, an n-way pool ofpossible fax servers and modems, for example, are available for use.

Fax processing resources 280 are operable to accept outbound fax jobsfrom imaging systems 250. According to one embodiment fax processingresources send the fax jobs to the destination(s) with automatic retriesand other customer-specified parameters. Fax processing resources 280may include one or more digital access cross connects (DACS) (not shown)and one or more fax servers (not shown), each of which may include oneor more analog fax modems, digital fax boards and/or soft modems (modemsimplemented in software). According to one embodiment, fax servers eachhave 24 ports and those ports are connected to the 24 ports of a singleDACS. Those of ordinary skill in the art will appreciate there are avariety of possible combinations of DACS to fax serverconnections/configurations. For example, in alternative configurations,each DACS may support multiple fax servers—theoretically as many faxservers as it has ports by connecting each port of the DACS to a singleport of a fax server. According to one embodiment, fax servers includeLinux servers running open source fax server software, such as HylaFAX.According to one embodiment, DACS provide DS1/DS0 (0/1) cross-connectfunctionality and may be one of Adtran's ATLAS series of enterpriseintegrated access devices, such as the ATLAS 550 series, ATLAS 800series, Tellabs Titan series DACS or the like.

According to one embodiment, one or more PBXs 270 are logicallyinterposed between fax processing resources 280 and telecom system(s)290. The PBX(s) 270 are operable to accept outgoing calls initiated byfax processing resources 280, determine an appropriate route for suchcalls, dial the appropriate route and bridge the call to the faxprocessing resource. At call completion, the PBX(s) 270 record telephony(Integrated Services Digital Network (ISDN)) information and callaccounting information in data store 265 for billing. PBXs 270 may beimplemented by installing and running an open source PBX softwarepackage on a server. For example, a non-limiting example of a suitablePBX is a Linux server running Asterisk. Alternatively, PBXs availablefrom Cisco or Avaya may be used.

According to one embodiment, telecommunications system(s) 290 areoperable to accept outgoing fax calls and select an appropriate trunkgroup (amongst multiple connected circuit and packet connections) basedon information received from PBX(s) 270. Telecommunications system(s)290 dial the outgoing fax call on the appropriate trunk group and uponcall completion, record telephony (ISDN), switch, accounting andtechnical information in data store (via RADIUS) for troubleshooting anddebugging purposes. In one embodiment, telecommunications system(s) 290include one or more switches (not shown), which may be connected to theInternet via Ethernet and connected to the PSTN via dedicated, highbandwidth circuits (e.g., DS3 and/or DS1 lines). In one embodiment,switches are high-capacity access servers providing both packet andtime-division multiplexing (TDM) switching. Examples of suitableswitches include, but are not limited to, the Cisco AS5850 UniversalGateway, the Cisco AS5800 Access Server, the Cisco AS5400 UniversalGateway, the Cisco AS5350 Universal Gateway and the Cisco AS5300Universal Access Server. Depending upon the particular implementation,telecommunications system(s) 290 may comprise a single switch ormultiple redundant switches in which one of the switches is an activeprimary switch and the others are active standby switches, which cantake over for the primary in the event of a failure. In alternativeembodiments, it is also possible to have an active/active redundantswitch architecture in which multiple circuits from PSTN and/or Internetprovide the same services and the circuits are split between multipleswitches that are interconnected in a mesh for redundancy and/orincreased capacity.

FIG. 3 is an example of a computer system with which embodiments of thepresent invention may be utilized. Embodiments of the present inventioninclude various steps, which will be described in more detail below. Avariety of these steps may be performed by hardware components or may betangibly embodied on a computer-readable storage medium in the form ofmachine-executable instructions, which may be used to cause ageneral-purpose or special-purpose processor programmed withinstructions to perform these steps. Alternatively, the steps may beperformed by a combination of hardware, software, and/or firmware. Assuch, FIG. 3 is an example of a computer system 300, such as aLinux-based fax server, a Linux-based PBX, a Solaris x86 database serveror the like, upon which or with which embodiments of the presentinvention may be employed.

According to the present example, the computer system includes a bus330, one or more processors 305, one or more communication ports 310, amain memory 315, a removable storage media 340, a read only memory 320and a mass storage 325.

Processor(s) 305 can be any future or existing processor, including, butnot limited to, an Intel® Itanium® or Itanium 2 processor(s), or AMD®,Opteron® or Athlon MP® processor(s), or Motorola® lines of processors.Communication port(s) 310 can be any of an RS-232 port for use with amodem based dialup connection, a 10/100 Ethernet port, a Gigabit portusing copper or fiber or other existing or future ports. Communicationport(s) 310 may be chosen depending on a network, such as a Local AreaNetwork (LAN), Wide Area Network (WAN), or any other network to whichthe computer system 300 connects. For example, in the context of a PBX,communication port(s) 310 may include communication cards supportingEthernet or DS1/DS3 types of connections and in the context of a faxserver, communication port(s) 310 may include Ethernet, DS0, T1/DS1(such as ISDN Primary Rate Interface (PRI)) or fractional T1/DS1 ordigital DS0 (such as ISDN Basic Rate Interface (BRI)).

Main memory 315 can be Random Access Memory (RAM), or any other dynamicstorage device(s) commonly known in the art. Read only memory 320 can beany static storage device(s) such as Programmable Read Only Memory(PROM) chips for storing static information such as start-up or BIOSinstructions for processor 305.

Mass storage 325 may be any current or future mass storage solution,which can be used to store information and/or instructions. Exemplarymass storage solutions include, but are not limited to, ParallelAdvanced Technology Attachment (PATA) or Serial Advanced TechnologyAttachment (SATA) hard disk drives or solid-state drives (internal orexternal, e.g., having Universal Serial Bus (USB) and/or Firewireinterfaces), such as those available from Seagate (e.g., the SeagateBarracuda 7200 family) or Hitachi (e.g., the Hitachi Deskstar 7K1000),one or more optical discs, Redundant Array of Independent Disks (RAID)storage, such as an array of disks (e.g., SATA arrays), available fromvarious vendors including Dot Hill Systems Corp., LaCie, NexsanTechnologies, Inc. and Enhance Technology, Inc.

Bus 330 communicatively couples processor(s) 305 with the other memory,storage and communication blocks. Bus 330 can include a bus, such as aPeripheral Component Interconnect (PCI)/PCI Extended (PCI-X), SmallComputer System Interface (SCSI), USB or the like, for connectingexpansion cards, drives and other subsystems as well as other buses,such as front side bus (FSB), which connects the processor(s) 305 tosystem memory.

Optionally, operator and administrative interfaces, such as a display,keyboard, and a cursor control device, may also be coupled to bus 330 tosupport direct operator interaction with computer system 300. Otheroperator and administrative interfaces can be provided through networkconnections connected through communication ports 310.

Removable storage media 340 can be any kind of external hard-drives,floppy drives, IOMEGA® Zip Drives, Compact Disc-Read Only Memory(CD-ROM), Compact Disc-Re-Writable (CD-RW), Digital Video Disk-Read OnlyMemory (DVD-ROM).

In some embodiments, a computer system, such as computer system 300, isconfigured to operate as one or more of PBXs. For example, as describedabove, any or all of PBX(s) 270 may be implemented as a Linux serverrunning an open source PBX software package, such as Asterisk. In someembodiments, a computer system, such as computer system 300, isconfigured to operate as one or more fax servers. For example, asdescribed above, any or all of fax processing resource(s) 280 may beimplemented as a Linux server running open source fax server software,such as HylaFAX. In some embodiments, a computer system, such ascomputer system 300, runs multiple virtual machines each of whichrepresents an imaging system of imaging systems 250. In someembodiments, a computer system, such as computer system 300, isconfigured to support one or more databases, such as a billing databaseand/or data store 265 including a centralized message/work queueaccessible by the gateway systems (e.g., email gateway 220, web gateway230 and API gateway 240) and imaging systems 250. For example, asdescribed above, any or all of the databases described herein may beimplemented within a Solaris x86-based workstation running an opensource database, such as MySQL. As those of ordinary skill in the artwill appreciate, the computer system components described above aremeant only to exemplify various possibilities. In no way should theaforementioned exemplary computer system limit the scope of theinvention.

FIG. 4 is a high-level flowchart conceptually illustrating outbound faxprocessing in accordance with an embodiment of the present invention.According to the present example, a request to deliver an outbound faxmessage can be received via email, web or API. If the request isreceived via email, then outbound fax processing continues with block410 in which email gateway processing is performed. According to oneembodiment, email gateway processing is as described with reference toFIG. 5.

If the request is received via web, then outbound fax processingcontinues with block 420 in which web gateway processing is performed.According to one embodiment, web gateway processing is as described withreference to FIG. 6.

Otherwise, if the request is received via API, then outbound faxprocessing continues with block 430 in which API gateway processing isperformed. According to one embodiment, API gateway processing is asdescribed with reference to FIG. 7.

As the initial submission devices (e.g., email gateway 220, web gateway230 or API gateway 240) process requests to deliver outbound faxmessages and create corresponding work requests for selected imagingsystems of imaging systems 250, imaging system work selection isperformed by each imaging system at block 440 to identify appropriatework requests. According to one embodiment, imaging system workselection is as described with reference to FIG. 9.

After an imaging system identifies appropriate work request(s), at block450, imaging system work processing is performed. According to oneembodiment, imaging system work processing is as described withreference to FIG. 11.

After the imaging system has completed its processing and has submittedthe corresponding fax job to a fax server, at block 460, fax server sendfax processing is performed. According to one embodiment, fax serversend fax processing is as described with reference to FIG. 12.

Responsive to fax server send fax processing, PBX call processing isinitiated at block 470. According to one embodiment, PBX call processingis as described with reference to FIG. 13.

Responsive to PBX call processing, switch route call processing isinitiated at block 480. According to one embodiment, switch route callprocessing is as described with reference to FIG. 14. After switch routecall processing is terminated, outbound fax processing is complete.

FIG. 5 is a flowchart illustrating email gateway processing inaccordance with an embodiment of the present invention. At block 510,the Internet fax system user is identified. According to one embodiment,information may be gathered regarding the sender of the email requestfrom the Return-Path and/or from other email headers associated with theemail request. Based on the identity of the sender of the email request,subscriber account information may be queried from a subscriber databaseto determine whether the sender is a valid user on an active subscriberaccount. If not, then a return email may be generated and transmitted tothe sender indicating the error and email gateway processing mayterminate. If the sender is confirmed to be a valid user of an activesubscriber account, then email gateway processing continues with block520.

At block 520, the fax destination is identified. In one embodiment,Internet fax system users may direct faxes to a desired fax destinationby directing the email to a domain owned by the Internet fax system andspecifying the desired fax destination in the local-part of the emailaddress (e.g., 3035551212@faxage.com). In such an embodiment, the faxdestination may be identified by extracting the local-part of the emailaddress in the “To” header of the email request. In alternativeembodiments, various other conventions may be used to convey the desiredfax destination. For example, the fax destination may be identified assuch (via a labeling or tagging convention) in the body of the emailrequest or in the subject line. Those skilled in the art will recognizenumerous other alternatives. If a valid destination is not foundassociated with the email request, then a return email may be generatedand transmitted to the Internet fax system user identifying the error(e.g., “no valid fax destination”) and email gateway processing mayterminate. If a valid fax destination is identified, then email gatewayprocessing continues with block 530.

At block 530, parameters, fax settings and attachments are gathered. Inone embodiment, optional parameters, such as priority (low or high),destination name and whether to include text and HTML attachment typeson a one-off basis, may be identified in the email request. As indicatedabove, various conventions may be used to convey values of parameters,including, but not limited to, providing a list of name-value pairs, inthe body of the email request or in the subject line. Other default orcustom fax settings may be stored in a subscriber database. For example,email fax settings for the subscriber account may specify whether asystem-generated cover sheet is to be used, types of email attachmentsthat are enabled and whether to store the subject line for later return.Having identified the types of permissible email attachments, the emailgateway can proceed to gather attachments, if any, according to validtypes. In one embodiment, the email body itself can serve as a validemail “attachment.” If no valid email attachments are found, then areturn email may be generated and transmitted to the Internet fax systemuser identifying the error (e.g., “no attachments to fax email”) andemail gateway processing may terminate. If one or more valid emailattachments are found, then email gateway processing continues withblock 540.

At block 540, copies of files to be faxed are stored in file store 260,for example. In addition to any valid email attachments associated withthe email request, the files stored may include a cover sheet as thefirst file to be faxed if a cover sheet is to be generated.

At block 550, fax details are stored to data store 265, for example. Faxdetails may include one or more of the following:

-   -   Sending user ID    -   Sending Account ID    -   Destination    -   Locations of files to fax    -   Optional parameters    -   Original subject line

In one embodiment, responsive to the fax details storage request, datastore 265 returns to email gateway 220 a unique ID (e.g., a job ID of 1to n digits) to be associated with this particular outbound fax job.According to one embodiment, the job ID is based on an auto-incrementedunique primary key.

At block 560, an imaging system selection process is performed.According to one embodiment, imaging system selection processing is asdescribed with reference to FIG. 8.

FIG. 6 is a flowchart illustrating web gateway processing in accordancewith an embodiment of the present invention. At block 610, a user inputsregarding an outbound fax are received. Typically, the user would firstlogin by providing login credentials (e.g., a username and a password)via a subscriber login page of a website associated with the Internetfax system. Responsive to receipt of the login credentials, web gateway230 queries a subscriber database to verify whether the logincredentials correspond to a valid user on an active subscriber account.If not, then an error message may be returned identifying the error(e.g., “login incorrect”) and web gateway processing may terminate. Ifthe login credentials correspond to a valid user on an active subscriberaccount, then web gateway processing continues (potentially afterreceiving one or more intermediate navigation requests from the userultimately indicating a desire to transmit a fax) by presenting one ormore HTML screens to the user to collect information associated with thedesired outbound fax. Information collected may include a destinationname and number, priority (low or high), from 1 to n locations ofcontent to be transmitted (e.g., paths of 1 to n files on the user'scomputer system, URLs or the like), a location of a file representing anoptional cover sheet and an indication of whether the user would like tobe notified by email when the fax transmission has completed. Accordingto one embodiment, after the files representing the content to betransmitted have been uploaded to the Internet fax system, the user isgiven an opportunity to fill out a cover sheet form, which causes thesystem to generate the cover sheet file. Processing then continues withblock 620.

At block 620, the files to be faxed are stored in file store 260, forexample. In addition to the file(s) representing the content of thedesired fax, the files stored may include an optional cover sheet as thefirst file to be faxed if a cover sheet is to be generated.

At block 630, fax details are stored to data store 265, for example. Faxdetails may include one or more of the following:

-   -   Sending user ID    -   Sending Account ID    -   Destination    -   Locations of files to fax

In one embodiment, responsive to the fax details storage request, datastore 265 returns to web gateway 230 a unique ID (e.g., a job ID of 1 ton digits) to be associated with this particular outbound fax job. Asdescribed above with respect to email gateway processing, the job ID maybe based on an auto-incremented unique primary key.

At block 640, an imaging system selection process is performed.According to one embodiment, imaging system selection processing is asdescribed with reference to FIG. 8.

FIG. 7 is a flowchart illustrating web services processing in accordancewith an embodiment of the present invention. At block 710, responsive toreceipt of an HTTP or HTTPS POST, API gateway 240 identifies theInternet fax system user making the request. According to oneembodiment, credentials are gathered from the POST and a subscriberdatabase is queried to determine whether the request is from a validuser on an active subscriber account. If not, then an error message maybe returned (e.g., “user not found”) identifying the error and webservices processing may terminate. If the request is confirmed to befrom a valid user of an active subscriber account, then web servicesprocessing continues with block 720.

At block 720, the fax destination is identified. In one embodiment,Internet fax system users may direct faxes to one or more desired faxdestination via API gateway 240 by specifying the destination(s) in thePOST request. If a valid destination is not found within the POSTrequest, then an error message identifying the error (e.g., “no validfax destination”) may be returned and web services processing mayterminate. If one or more valid fax destinations are identified withinthe POST request, then web services processing continues with block 730.

At block 730, parameters, fax settings and attachments are gathered. Inone embodiment, parameters, such as the file(s) or URL(s) to fax, therecipient name and optional parameters, such as priority (low or high),caller ID, resolution, contrast algorithm, notification preference(e.g., via URL or email) and tagline name and number, may be identifiedin the POST request. If one or more URLs are specified as the content ofthe fax, then the content of the URLs are downloaded and stored as afile to fax. Any non-URL files included within the POST request arebase64 decoded. If no valid files are associated with the POST request,then an error message identifying the error (e.g., “no files to fax) maybe returned and web services processing may terminate. If one or morevalid files are associated with the POST request, then web servicesprocessing continues with block 740.

At block 740, the files to be faxed are stored in file store 260, forexample.

At block 750, fax details are stored to data store 265, for example. Faxdetails may include one or more of the following:

-   -   Sending user ID    -   Sending Account ID    -   Destination    -   Locations of files to fax    -   Optional parameters from the POST request

In one embodiment, responsive to the fax details storage request, datastore 265 returns to API gateway 240 a unique ID (e.g., a job ID of 1 ton digits) to be associated with this particular outbound fax job. Asdescribed above with respect to web and email gateway processing, thejob ID may be based on an auto-incremented unique primary key. In oneembodiment, the job ID is returned to the source of the POST request.

At block 760, an imaging system selection process is performed.According to one embodiment, imaging system selection processing is asdescribed with reference to FIG. 8.

FIG. 8 is a flowchart illustrating imaging system selection processingin accordance with an embodiment of the present invention. At block 810,a list of candidates is generated by gathering current load informationfor imaging systems (e.g., imaging systems 250). In one embodiment, thecurrent load information for the imaging systems is periodicallycalculated and reported by the individual imaging systems and stored indata store 265 as described further below with reference to FIG. 10. Insuch an embodiment, the current load information is gathered byrequesting the most recently reported load information from data store265. Various alternative methods for gathering current load informationwill be understood by those of ordinary skill in the art. For example,the initial submission device (e.g., email gateway 220, web gateway 230or API gateway 240) to which the outbound fax request was made may pollthe imaging systems directly for their current load information at thetime when such information is needed.

At block 820, the least loaded imaging system is selected. Dependingupon the particular load score computation, the least loaded imagingsystem may be associated with the lowest load score or the highest loadscore. In the exemplary load score calculation processing describedbelow with reference to FIG. 10, the least loaded imaging system is theone having the lowest load score.

At block 830, an attempt is made to connect to the selected imagingsystem. According to one embodiment, the initial submission device(e.g., email gateway 220, web gateway 230 or API gateway 240) to whichthe outbound fax request was made and which is currently performing theimaging system selection processing attempts to make an HTTP connectionto the selected imaging system. Those skilled in the art will appreciatevarious acknowledgement mechanisms can be employed for the selectedimaging system to confirm to the initial submission device that it isable to accept and process a work request. In one embodiment, theimaging systems are configured to echo back the job ID passed on theconnection if they are up and working.

At decision block 840, a determination is made regarding whether theconnection attempt was successful. According to one embodiment, thisdetermination is made based on whether the selected imaging systemechoes back the job ID to the initial submission device via the HTTPconnection. If the connection attempt was unsuccessful, then processbranches to block 850; otherwise, imaging system selection processingcontinues with block 860.

At block 850, the selected imaging system is removed from the list ofcandidates and a new imaging system is selected by looping back to block820.

At block 860, the imaging system work request is stored in thecentralized message/work queue within data store 265, for example, andimaging system selection processing is complete. In one embodiment, thework request contains information identifying the selected imagingsystem that should process the work request.

In one embodiment, the initial submission device may update the loadinformation associated with the selected imaging system to reflect thenewly assigned work request. In this manner, to the extent subsequentimaging system selection processing occurs before the load scorecalculation cycle is able to update the load score for the selectedimaging system, the subsequent imaging system selection processing willstill have the benefit of access to load information for the selectedimaging system that more accurately reflects its soon to be currentlyeffective load, thereby preventing work requests from being assigned tothe selected imaging system based on an out-of-date load score.

FIG. 9 is a flowchart illustrating imaging system work selection inaccordance with an embodiment of the present invention. According to oneembodiment, a daemon running on each of the imaging systems performswork selection to determine a work processing order that promotesfairness among subscribers and avoids starvation under heavy work loads.In one embodiment, each imaging system has a configured level ofsimultaneous processing capability (e.g., between 2 and 5 simultaneousjobs, such as 3 jobs) and implements a “fair queue” to provide a unique“slot” per customer among its available work slots. Multiple slots canbe used by a particular subscriber (subject to subscribed capacitylimitations) if slots remain available and there are not othersubscriber requests competing over such slots.

For simplicity and sake of brevity, FIG. 9 illustrates processingperformed by a single imaging system in connection with work selection.It is to be understood that multiple imaging systems may be concurrentlyperforming such processing.

At block 910, the imaging system at issue polls data store 265 forpending imaging system work requests. In one embodiment, the imagingsystem work requests are stored in a centralized message/work queuewithin data store 265. Thus, in response to the polling request, datastore 265 may return only those work requests from the centralizedmessage/work queue that identify the imaging system at issue as the oneselected for processing the corresponding work request. Those of skillin the art will appreciate there are numerous mechanisms that can beused to trigger the polling cycle described herein. For example, thepolling cycle may be triggered responsive to expiration of aconfigurable timer (e.g., every 5 seconds), upon the availability of oneor more job slots, upon the completion of one or more job slots or thelike.

At decision block 920, the imaging system determines if it is currentlyrunning a maximum number of simultaneous jobs. In one embodiment, thisinvolves retrieving the configured simultaneous maximum jobs allowed tobe performed by the imaging system (e.g., the number of total job“slots” the imaging system has) and subtracting from this the number ofjobs currently being processed. If the imaging system is currentlyprocessing at its maximum number of simultaneous jobs (i.e., all jobslots are allocated), then imaging system work selection processingloops back to block 910. If one or more job slots are available, thenimaging system work selection processing continues with decision block930.

At decision block 930, a determination is made regarding whethersufficient job slots are available to process all of the pending imagingsystem work requests for the imaging system. If not, then the fairnessaspects kick in and imaging system work selection processing branches toblock 950; otherwise, processing continues with block 940.

At block 940, it has been determined that sufficient job slots areavailable to process all pending job requests for the imaging system, soall of these pending job requests are removed from the centralizedmessage/work queue and imaging system work processing is triggered.

At block 950, it has been determined that insufficient job slots areavailable to process all pending job requests for the imaging system, sowork requests for customers without in-process work requests areidentified. According to one embodiment, this involves building a listof customers for whom jobs are currently processing and then checkingfor work for customers other than those on the list on afirst-in-first-out basis.

At decision block 960, a determination is made regarding whether workrequests exist for customers for which jobs are not already in-processon the imaging system. If such jobs are found, then imaging system workselection processing continues with block 940; otherwise processingbranches to block 970.

At block 970, work requests for customers with in-process work requestsare identified. According to one embodiment, this identification of workrequests is performed on a first-in-first-out basis and may be limitedby a number of concurrent jobs allowed pursuant to the customer'ssubscription plan with the Internet fax system. After appropriate workrequests have been identified, imaging system work selection processingcontinues with block 940.

FIG. 10 is a flowchart illustrating load score calculation processing inaccordance with an embodiment of the present invention. For simplicityand sake of brevity, FIG. 10 illustrates one cycle of load scorecalculation processing performed by a single imaging system inconnection with load score calculation processing. It is to beunderstood that all imaging systems may be concurrently performing suchprocessing and that such processing may be periodically triggered as aresult of expiration of a timer (e.g., every 5 to 10 seconds) orresponsive to some other event in the Internet fax system (e.g., arequest for load information from an initial submission device,completion of a job or the like).

At decision block 1010, the imaging system determines whether it isconfigured to accept jobs. This determination may be performed withreference to configuration information set by an administrator of theInternet fax system, for example. According to one embodiment, animaging system is configured not to select jobs by creating a flag file(e.g., /tmp/oor) on the imaging system to communicate to the imagingsystem that it is out of rotation. If the imaging system is currentlyconfigured to accept jobs, then the load score calculation processingcontinues with block 1030. If the imaging system is not currentlyconfigured to accept jobs, then the load score calculation processingbranches to block 1020.

At block 1020, this imaging system is removed from consideration forwork assignment. In one embodiment, any existing load information forthis imaging system is removed from data store 265 to precludeassignment of imaging work to this imaging system. Alternatively, theload score for this imaging system may be set to a value, such as thehighest load score, to indicate this imaging system's unavailability toprocess work requests. Load score calculation processing is thenterminated until the next load score calculation processing cycle istriggered.

At block 1030, the load score for this imaging system is calculated. Inone embodiment, the load score is based on the number of jobs currentlyin-process on the imaging system, the current CPU load and the amount ofmemory currently in use. According to one embodiment, the load score iscalculated in accordance with the following equation:

A×(number of jobs pending)+B×(CPU load)+C×(megabytes of memory used)

where,

A is a constant value between 0.5 and 5 (e.g., 1).

B is a constant value between 5 and 20 (e.g., 10).

C is a constant value between 0 and 1 (e.g., 0.01).

Those skilled in the art will appreciate various alternativecalculations can be used. For example, the constants A, B and/or C canbe adjusted as appropriate to suit a particular implementation orimaging system configuration.

At block 1040, the imaging system updates data store 265 with the newlycalculated load score. Notably, while the present example is describedassuming each imaging system gathers load information (e.g., jobspending, CPU load and memory used), in alternative embodiments, aprocess external to the imaging systems may be provided with access toload information and may perform the actual load score calculationprocessing and/or reporting to data store 265 on behalf of the imagingsystems.

FIG. 11 is a flowchart illustrating imaging system work processing inaccordance with an embodiment of the present invention. At block 1110,data is gathered for creating a fax job. According to one embodiment,this involves gathering command-line arguments (e.g., job ID and anoptional caller ID), identifying the customer associated with the joband job-specific parameters from the database (e.g., data store 265) andgathering customer outgoing fax settings from the database, some ofwhich may be potentially overridden by the job-specific parameters. Inone embodiment, the customer outgoing fax settings include one or moreof the following:

-   -   Notification setting (e.g., email, API push, web or API poll)    -   Sending user    -   Tagline name and number to use    -   Tagline time zone to use for timestamp on fax    -   Generate fax TSI to use from tagline number    -   Resolution to image at (e.g., low, fine or hyperfine)    -   Number of retries to perform    -   Contrast enhancement algorithm to use (the Internet fax system        may implement multiple contrast enhancement algorithms, e.g., a        default algorithm, a darkening algorithm, etc.    -   Custom email notification parameters (from address, subject and        body templates), if any    -   Maximum queue time for this fax

In one embodiment, the destination number may be checked againstdisallowed numbers. For example, system-wide and/or customer-specificblacklists (do not fax list) may be maintained and enforced to preventcalls to certain numbers (e.g., 911, 411, etc.). In such an embodiment,if the destination is on one of the do not fax lists, then an errormessage will be communicated to the user according to the notificationsettings and imaging system work processing is terminated.

At block 1120, the source documents are converted into a digitalrepresentation suitable for faxing. In one embodiment, this involvesconverting the source documents into a single multi-page TIFF using theresolution and contrast enhancement as previously identified. If theconversion is unsuccessful, then an error message will be communicatedto the user according to the notification settings and imaging systemwork processing is terminated. If the conversion is successful, thenprocessing continues with block 1130.

At block 1130, destination-specific fax settings, if any, are gathered.According to one embodiment destination-specific fax settings aregathered from the database (e.g., data store 265) and include one ormore of the following:

-   -   Maximum speed    -   Fax protocol class to use (e.g., 1, 1.0, 2.0 or 2.1)    -   Enable or disable error correction mode (ECM)

At block 1140, an appropriate fax modem of available fax processingresources (e.g., fax processing resources 280) is selected. According toone embodiment, the available fax processing resources are filtered toproduce an initial candidate list based on the ability of the modems tomeet the desired capabilities (e.g., the destination-specific faxsettings previously identified). From the initial candidate list, thelist of potential fax modems to use to transmit the call is furtherrefined based on whether the customer is at or above its subscribedcapacity. If the customer is at or above capacity, then the linescurrently being used are selected; otherwise, the least used (or firstunused) line found in the database is selected.

At block 1150, the fax job is submitted to the fax server containing theselected fax modem. According to one embodiment, submitting includessending the following information to the fax server:

-   -   Destination number    -   A TIFF image file to fax    -   Tagline name and number to use    -   Time zone to use on the tagline    -   Number of retries to attempt    -   TSI (the fax identifier on the call) to use    -   Format of the tagline    -   Sending customer account number    -   Maximum time the fax may be in the queue    -   The specific fax modem to use    -   Modem capabilities to use (as identified previously in        connection with gathering destination-specific fax settings)

If submission is successful (e.g., the fax server returns a uniquecommunication ID to the image server), then imaging system workprocessing continues with block 1160. If submission is unsuccessful,then an error message may be communicated to the user according to thenotification settings and imaging system work processing may terminate;however, in an embodiment in which a configurable number of retries maybe attempted upon unsuccessful submission, imaging system workprocessing may continue by excluding the previously selected fax modemfrom the list of potential fax modems and looping back to block 1140until submission is successful or the number of retires is exhausted.

At block 1160, the database is updated to reflect successful submission.In one embodiment, updating the database includes updating a counter inthe database to reflect the customer has a job in progress on theselected fax modem and updating the outgoing fax job with one or more ofthe following:

-   -   The fax server communication ID returned by the fax server upon        successful submission    -   The number of pages in the single multi-page TIFF file submitted    -   The caller ID to use if such optional caller ID information was        previously available during the gathering process of block 1110    -   An indication of an “In Queue” state (which allows API and web        retrieval to show the fax is currently in queue and waiting to        be sent)

FIG. 12 is a flowchart illustrating fax server send fax processing inaccordance with an embodiment of the present invention. At block 1210, afax server receives a fax job request from an imaging system and returnsa unique communication ID to the imaging system.

At block 1220, the fax server images the tagline on to the documentaccording to the received parameters.

At block 1230, the fax server queues the fax for sending on therequested fax modem.

At block 1240, when this fax comes up in the queue, the fax modem isinitialized with the requesting capabilities and the destination numberis dialed.

At block 1250, a DACS, connected via a POTS line to the fax modem,writes information into the caller ID field to allow an upstream PBX toidentify the modem/port originating the fax call. According to oneembodiment, the DACS sets the caller ID field based on a static numberassignment mechanism that forms a one-to-one association between anextension and a particular modem/port and then forwards the call to aPBX attached via T1/PRI. In one embodiment, each PBX of the Internet faxsystem architecture is associated with one or more DACS each having 24fax ports and each fax server is connected to multiple ports of a DACSand the extensions have the following format:

303303DDFF

Where:

-   -   the first six digits (i.e., 303303) are hard-coded    -   DD represents the DACS with which the fax server is associated    -   FF represents the port to which the fax modem on the fax server        is connected the DACS to which the fax server is connected.

Following the above convention (or variations thereof) for associating astatic number with a modem/port, the PBX receiving the fax call may usethe caller ID information passed to it to identify the specific faxmodem on the specific fax server and may use that information tointerrogate the fax server for desired information as described furtherbelow with reference to FIG. 13.

If the fax call is successful, then fax server send fax processingcontinues with block 1260. If the fax call is unsuccessful, then aconfigurable number of carrier retries may be attempted by recording thenumber of attempts and causing the PBX to retry with an alternatecarrier if the failure reason is one eligible for an alternate carrierretry (e.g., disconnected, no carrier or busy) or retry with the samecarrier if the failure reasons is not one eligible for trying analternate by looping back to block 1230. After the retries have beenexhausted, processing continues with block 1260.

In some embodiments, a notify process may be performed at this point offax server send fax processing (regardless of the success or failure ofthe fax call) to record the location of the file (attempted to be)faxed, a success/failure indicator, transmission time, communicationsID, sending account ID and number of pages transmitted. This informationmay be used later in combination with additional information to providea detailed outbound fax confirmation to the user via their configurednotification method (e.g., email or API notification). In oneembodiment, regardless of the configured notification method (e.g., evenif it is “none”), the database is updated so that web-based statusinformation is available to the customer via web retrieval through webgateway 230, for example.

At block 1260, a call accounting process is performed. According to oneembodiment, the call accounting process is as described with referenceto FIG. 15.

At decision block 1270, a determination is made regarding the type ofnotification, if any, to be performed in relation to the completed faxjob. According to one embodiment, the notification type (e.g., email,API push to URL or none) for this outbound fax is first retrieved fromthe database. If the notification setting for this outbound fax is none,then fax server send fax processing is complete. If the notificationsetting for this outbound fax is email, then fax server send faxprocessing continues with block 1280; otherwise processing branches toblock 1290.

At block 1280, an email notification process is performed. According toone embodiment, the email notification process is as described withreference to FIG. 16.

At block 1290, the user is notified regarding the completed fax job viaAPI. According to one embodiment, the URL (originally recorded by APIgateway 240) to which the notification is to be pushed is retrieved fromthe database. The following data may then be POSTed to the specified URLand fax server send fax processing is complete:

-   -   Fax job ID    -   Communications ID    -   Destination name    -   Destination number    -   Success/failure    -   Detailed reason (if failure)    -   Time sent    -   Time completed    -   Call duration    -   Total number of pages    -   Number of pages transmitted

FIG. 13 is a flowchart illustrating PBX call processing in accordancewith an embodiment of the present invention. At block 1310, a PBX,logically interposed between fax processing resources 280 and telecomsystem(s) 290, receives an incoming call from DACS (representing theoutbound fax call).

At block 1320, the caller ID field is set appropriately for the sendingaccount. According to one embodiment, the caller ID field is set witheither a default caller ID associated with the subscriber account or acaller ID associated with this communications ID, if specified.

As noted above with reference to FIG. 12, in one embodiment, the callerID field communicated to the PBX may contain extension informationaccording to a static number assignment mechanism that forms aone-to-one association between an extension and a particular faxmodem/DACS port. This allows the PBX to identify the fax serveroriginating the outbound fax call, make an IP connection to the faxserver and interrogate the fax server for the communications ID of thefax job being sent by the fax modem identified by the caller ID field.

Using the communications ID, the PBX may then query the database toidentify the sending subscriber account ID that initiated thecommunications ID and can retrieve the default caller ID associated withthe subscriber account ID. This caller ID will be written to the callerID field unless overridden by a particular caller ID value specified bythe user to be associated with this outbound fax call in which case thecaller ID field will be set with the call-specific caller ID value.

At block 1330, a route code is prepended to the destination number.According to one embodiment, the database is checked to determine if adestination-specific route code exists. In one embodiment, the firstmatch of the following takes precedence:

-   -   A route code associated with the full number (e.g., all ten        digits of the destination number)    -   A route code associated with the NPANXX (e.g., the first six        digits of the destination number)    -   A route code associated with the NPA (a/k/a area code, the first        three digits of the destination number)    -   A default route code

In one embodiment, if a default route code is to be used, then thedatabase carrier rate tables are queried to determine the lowest costroute code based on NPANXX of the destination number.

In an implementation that allows carrier retries, the current route codemay be overridden. According to one embodiment after the route code hasbeen determined based on the foregoing criteria, the database is queriedto determine if the current fax call is a retry attempt wherein analternate carrier has been requested by the fax server. If so, then thecurrent route code is overridden with an alternate carrier route codedifferent from that used in the prior fax call attempt.

In alternative embodiments, the order of route code determinationdescribed above may be reordered so as to first identify whether thecurrent fax call is a retry attempt and if so identifying the alternatecarrier route code; otherwise applying the destination-specific routecode matching algorithm noted above.

In any event, after the route code is determined, it is prepended to thedestination number to cause a switch of telecom system(s) 290, forexample, to select an appropriate trunk for the outbound fax call.

At this point in PBX call processing, the PBX may internally mark thiscall (for call detail record (CDR)) with one or both of the following:

-   -   The account code of the account ID previously gathered    -   A user field specifying the communication ID and fax modem that        initiated the call

At block 1340, the outbound fax call is dialed to the switch via aT1/PRI connection with the caller ID and destination as set based on theforegoing PBX call processing steps.

At block 1350, the PBX waits for the call to complete (e.g., switchdisconnect). Upon call completion, the PBX disconnects the bridgedconnection from the DACS, records the CDR to the database and PBX callprocessing is terminated.

FIG. 14 is a flowchart illustrating switch route call processing inaccordance with an embodiment of the present invention. At block 1410, acall request representing an outbound fax call is received from a PBX.

At block 1420, an appropriate trunk group is determined for the call.Trunk groups may provide a transmission channel to a packet-switchednetwork (e.g., the Internet) or a circuit-switched network (e.g., thePSTN). According to one embodiment, the destination number of the callrequest (which includes the route code digits prepended by the PBX) ispattern-matched against trunk groups (e.g., T1/PRI, DS3, SessionInitiation Protocol (SIP) and the like) attached to the switch with themost specific match taking precedence.

At block 1430, the prepended digits are stripped to arrive at anappropriate number of digits to dial (e.g., the right-most 10, 11, 7,etc.) according to the configuration of the selected trunk group.

At block 1440, the call is dialed on the selected trunk group to thedestination.

At block 1450, upon call completion, call details are recorded, thebridged connection from the PBX is disconnected and switch route callprocessing is terminated.

FIG. 15 is a flowchart illustrating call accounting processing inaccordance with an embodiment of the present invention. At block 1510,the call duration for the outbound fax call is set. According to oneembodiment the database is first queried for a CDR associated with thedestination and sending account ID to obtain actual call duration. Ifthe CDR is found, then the actual call duration is used; otherwise thetransmit time is used as the call duration.

At block 1520, the fax job is updated in the database. According to oneembodiment, the fax job ID is first looked up in the database based onthe communication ID, account ID and “in queue” state. Then, the fax jobrecord is updated in the database to indicate success or failure and adetailed reason for the failure is added in the case of a failure. Thenumber of pages transmitted may also be added to the fax job record.

At block 1530, the appropriate job in-progress counter is decremented.According to one embodiment, a job in-progress counter is maintained inthe database for each fax modem by customer. In some embodiments, thiscounter is used during imaging system work processing to select anappropriate fax modem (see, e.g., FIG. 11 and block 1140).

FIG. 16 is a flowchart illustrating email notification processing inaccordance with an embodiment of the present invention. At block 1610,an email notification template is identified that is to be used foremail notifications to the user. According to one embodiment, thedatabase is queried to locate a custom email notification template forthe subscriber account. The custom email notification template maydefine custom messaging for use in connection with the subject lineand/or body of the email notification. If a custom template is notspecified for the subscriber account, then a default email notificationtemplate may be used.

At block 1620, notification options are checked. According to oneembodiment, notification options include whether to include atransmittal page and whether to include the original email fax requestsubject line. Those skilled in the art will appreciate various otheroptions are possible. For example, the subscriber may specify emailnotifications are to be in plain text format versus HTML and that thetransmittal page and/or the scaled image of the first page are to besent as attachments versus inline images.

If a transmittal page is to be included with email notifications forthis subscriber account, then a transmittal page is generated includingone or more of the following:

-   -   Destination    -   Call status (success/failure, detailed reason if failure)    -   Number of pages transmitted    -   Date/time in user's specified time zone    -   Call duration    -   Scaled image of the first page of the file faxed

If the subject line from the email fax request that initiated this faxjob is to be included, then the subject for this job ID is retrievedfrom the database (which was recorded earlier by the email gateway 220,for example).

At block 1630, the email notification is formatted according to theidentified template and notification options and sent to the user thatoriginated the email fax request for this fax job.

While embodiments of the invention have been illustrated and described,it will be clear that the invention is not limited to these embodimentsonly. Numerous modifications, changes, variations, substitutions, andequivalents will be apparent to those skilled in the art, withoutdeparting from the spirit and scope of the invention, as described inthe claims.

APPENDIX Overview

The FAXAGE Internet Fax API provides capabilities that an applicationprogrammer can use to integrate Fax capabilities into their applicationutilizing the FAXAGE service as a backend. The integration itself isaccomplished via HTTPS POST operations.

POSTS are sent to the following URLs:

-   -   https://www.faxage.com/httpsfax.php—Fax sending and receiving        operations    -   https://www.faxage.com/getcdr.php—Call detail record collection    -   https://www.faxage.com/provision.php—Automated number        provisioning

Each of these URLs will be described in this documentation in terms ofboth required and optional variables that are sent to the URL in orderto accomplish certain operations. Responses from the FAXAGE system areadditionally defined throughout this documentation in the relevantsection.

The httpsfax.php URL

There are nine basic operations (six related to sending and three forreceiving) as detailed below. There are also four ‘other’ operations forenabling and disabling inbound fax reception on DID's assigned to youraccount, checking portability and listing currently assigned DID's. Eachof these operations is described in further detail later in thisdocument, as far as required and optional parameters and possibleresponses.

Sending-Related Operations

-   -   1. sendfax—allows for posting one or more files that will be        faxed to a specified destination. It can also accept a URL        rather than file(s) and will download the specified URL and fax        out the HTML content or document that the URL points to    -   2. status—allows for checking status (pending, success, failure)        of a fax that has been sent    -   3. dlstatus—allows for downloading a copy of a sent fax as        imaged and sent    -   4. dltrans—allows for downloading a ‘transmittal page’ PDF (job        summary information, plus shrunk-down version of first page) for        sent faxes.    -   5. clear—allows for deleting status records for faxes that have        completed sending (either success or failed)    -   6. stopfax—allows a pending job to be stopped/cancelled

Receiving-Related Operations

-   -   1. listfax—allows for listing of currently received faxes    -   2. getfax—allows for downloading of a received fax    -   3. delfax—allows for deleting a received fax (presumably after        it's downloaded)

Other Operations

-   -   1. disabledid—allows for a number to be ‘busied out’ so that        faxes cannot come in to it    -   2. enabledid—allows for a number that had been disabled to be        re-enabled (all numbers are enabled for inbound by default when        set up)    -   3. portable—allows for checking of a phone number as to whether        or not FAXAGE can provide service in the rate center in which        the number resides. I.e.: whether or not the number is        potentially portable to FAXAGE    -   4. listlines—allows for listing all currently assigned DID's

A debugging URL is also provided that is equivalent to the httpsfax.phpURL, except that it also returns the contents of your POST, so that youcan see what our server thinks you passed us:

https://www.faxage.com/httpsfax-debug.php

Sendfax Operation

Note the optional ‘URL Mode’ below. If you wish to POST a URL to bedownloaded and faxed out rather than file data, please use the variablesshown rather than the first set of Required POST Variables which are forthe ‘standard’ mode.

Supported File Types

As of this writing, the following file types are supported for sending,others may become available over time, so please check with us if thetype of content you wish to send is not listed here:

Description Extension(s) JPEG Image JPG, JPEG Adobe PDF PDF AdobePostScript PS TIFF Image TIF, TIFF Microsoft Word DOC Microsoft WordTemplate DOT Microsoft Word 2007 DOCX OpenOffice Writer Doc (OpenDocument Text) ODT Rich Text RTF Microsoft Excel XLS Microsoft Excel2007 XLSX OpenOffice Calc Spreadsheet ODS Comma-separated CSV CSV HTMLHTM, HTML Bitmap Image BMP GIF Image GIF HP Printer Control Language PCLPlain Text TXT

Required POST Variables for Standard Mode

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password recipnameRecipient Name - 32 chars max faxno Fax Number - 10 digits, numeric onlyoperation Hard coded to ‘sendfax’ (w/o the quotes) faxfilenames[ ] Arrayof file names. These must end in a supported extension - see the tableabove for a list faxfiledata[ ] Corresponding array of base64-encodedstrings that are the contents/data of the file in faxfilenames. E.g.: iffaxfilenames[0] is test.doc, then faxfiledata[0] should be thebase64-encoded contents of test.doc

Required POST Variables for URL Mode

The URL mode will support faxing the HTML content and will usestylesheets as well as images, etc. However, any client-side scriptingwill not be executed by the parser on our end.

Any supported file type (such as a Word document or PDF) may also bepassed in URL mode, provided that these are available at a designatedURL. Use the optional faxurltypes[ ] array if they are script-supplied(i.e.: the extension of the URL does not match the document type),otherwise HTML content is assumed for all URLs.

HTML passed to FAXAGE (in standard mode as a file versus URL mode) cancontain external hyperlinks to images, etc. via HTTP or HTTPs as long asthe links are absolute (i.e.: begin with http:// or https://) or images,etc. can be passed as additional files along with the HTML, depending ondeveloper preference.

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password recipnameRecipient Name - 32 chars max faxno Fax Number - 10 digits, numeric onlyoperation Hard coded to ‘sendfax’ (w/o the quotes) faxurl Absolute URLpath (beginning with http:// or https://) to the URL to be faxedfaxurls[ ] Can be used in place of Faxurl to send an array list ofmultiple URLs to be faxed

Optional POST Variables for Both URL and Standard Modes

Variable Description tagname In the header of each fax page, thisspecifies the name that will follow From: If unspecified, the defaultfor your company will be used tagnumber In the header of each fax page,this specifies the fax number that will follow tagname. 14 charactersmax. If unspecified, the default for your company will be used. Thisshould be in 1.XXX.XXX.XXXX format em_notify If this variable is set to1, then the final status of the job will be pushed via email to theemail address associated with the user credentials that submitted thejob. This can be used as an alternative to polling for status throughthe API. The format of the email is the JOBID (see ‘possible responses’below) in the subject line and the body will contain the same recordformat as would be provided by the ‘status’ operation (see the<StatusRecord> format definition in the ‘status’ operation section ofthis document) url_notify Set to an absolute URL (beginning with http://or https://) to have the FAXAGE system POST back the fax job statusrecord when the fax completes. See the ‘Callback URL POST’ section belowfor a listing of what is posted back. resolution Set to ‘1’ for fineresolution or ‘2’ for hyperfine. If not passed, the fax will use yourdefault account settings (as specified in the website under ‘Admin’ −>‘Outgoing Fax Settings’ −> ‘Resolution and Retries’) contrastalgo Set to‘1’ for the default contrast enhancement algorithm or ‘2’ for analgorithm that produces more darkening (useful for lighter scans). Thedefault if not passed is ‘1’ priority Set to ‘high’ or ‘low’. Bydefault, if this is not passed, the priority is ‘high’. Setting certainfaxes to ‘low’ priority allows your other faxes to complete ahead ofthem by jumping ahead of low priority faxes in your queue. For instance,you could send a batch of faxes as ‘low’ priority, but one-off userfaxes as ‘high’, so that they would be able to jump the queue ahead ofyour batch

Optional POST Variables for URL Mode Only

Variable Description async If this variable is set to 1, then the FAXAGEsystem will return your jobid immediately and retrieve the URL contentspecified asynchronously (after your connection is completed). Thedefault is to retrieve the URL before returning faxurltypes[ ] If thefaxurls[ ] array is used, this can be passed as well. By default thesystem determines the filetype of a URL based on its extension anddefaults to HTML if unknown (such as an ASP or PHP page being passed).The faxurltypes[ ] array can contain a list of extensions, correspondingto the indexes in the faxurl[ ] array. For example, if faxurls[0] ishttp://www.example.com/download.asp?docid=2 and this URL will return aWord document, then faxurltypes[0] would be set to ‘doc’

Possible Responses

Response Meaning ERR01: Database connection failed Internal FAXAGE errorERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR03: No files tofax No valid files where found in faxfilenames[ ] and/or faxfiledata[ ]ERR04: Fax number <number> appears to The faxno variable does notcontain a 10- be invalid digit numeric only string ERR05: <reason> Thenumber you tried to fax to was blocked (outside of continental US,Canada and Hawaii or a 555, 911, or other invalid/blocked type ofnumber) JOBID: <numeric-job-id> Successful send. The jobid reported canlater be used to get status, etc. for this job ERR08: Unknown operationspecified or Either operation is not correctly hard coded bad POST <POSTcontents> or the POST was bad, the POST contents are returned fordebugging purposes ERR15: Invalid Job ID Internal FAXAGE error - the jobwas not properly inserted into our database

Callback URL POST Response

If url_notify is passed into the initial sendfax call, then thefollowing variables and values will be posted back to a URL you specifywhen the fax completes. You will need to set up a web page at the URLyou designate in the sendfax call that can handle a POST of thevariables listed below and do what you need with the information. It isstill possible to poll for status (using the ‘status’ operation) if acallback is missed for any reason.

Variable Name Value jobid The numeric jobid returned by sendfaxoriginally commid Numeric communications job identifier destname Thedestination name destnum The destination fax number shortstatus One of‘pending’, ‘success’ or ‘failure’ longstatus Descriptive failure reasonor other descriptive text about the status. NOTE: This text is intendedto be human- readable and is subject to change, programmatic parsing orrendering of the ‘longstatus’ field is not recommended. sendtime Timethis job was submitted YYYY-MM-DD HH:MM:SS format completetime Time thisjob was completed YYYY-MM-DD HH:MM:SS format, all 0's if the job ispending xmittime Transmit time for this job HH:MM:SS format pagecountThe number of pages in the job xmitpages The number of pages actuallytransmitted (once the job is completed-it shows ‘0’ while the fax is inprogress)

Status Operation Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘status’ (w/o the quotes)

Optional POST Variables

Variable Description jobid If specified, reports only the status of therequested jobid, otherwise reports status of all jobids for your companyjobids[ ] Alternative to ‘jobid’ to request status for an array list ofjobs as opposed to a single job pagecount Hard code this variable to‘1’. If passed, this will cause the page count to be displayed as thelast field on each status record. If not passed, then page counts willnot be displayed useronly Hard code to ‘1’. If passed, the status callwill only show records pertaining to faxes sent by the calling username,versus showing all records for the account, which is the default mode ofoperation extqueue Hard code to ‘1’. If passed, extended queue statuswill be shown for faxes that are currently in queue csid Hard code to‘1’. If passed, will return the remote station ID for completed faxesshowlogin Hard code to ‘1’. If passed, will show the usernamecorresponding to the credentials that were used to send the faxxmitpages Hard code to ‘1’. If passed, will show the number of pagesactually transmitted begin Date and time from which status recordsshould begin in YYYY- MM-DD HH:MM:SS format end Date and time from whichstatus records should end in YYYY- MM-DD HH:MM:SS format

Possible Responses

Response Meaning ERR01: Database connection failed Internal FAXAGE errorERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR06: No jobs todisplay or job id The jobid you passed was not found or there arespecified not found simply no jobs to report for your company at thistime <StatusRecord> The format of the status record(s) returned is asfollows (newline separation if multiple records). See below fordefinition of each field <jobid><tab><commid><tab><destname><tab><destnum><tab><shortstatus><tab><longstatus><tab><sendtime><tab><completetime><tab> <xmittime>(OPTIONAL:<tab><pagecount><tab><csid><tab><login><tab> <xmitpages>) See thepagecount optional variable above - A page count may be passed as afinal field ERR08: Unknown operation Either operation is not correctlyhard coded or the specified or bad POST <POST POST was bad, the POSTcontents are returned for contents> debugging purposes

Definition of Status Record Fields

jobid—The numeric jobid returned by sendfax originallycommid—Communications job identifier. Useful for support debuggingdestname—The destination namedestnum—The destination fax numbershortstatus—One of ‘pending’, ‘success’ or ‘failure’longstatus—Descriptive failure reason or other descriptive text aboutthe status. NOTE: This text is intended to be human-readable and issubject to change, programmatic parsing or rendering of the ‘longstatus’field is not recommended. If the extqueue value is passed, then thelongstatus will be postfixed with ‘Tries: <number of tries so far>Status: <status of last attempt>’. This can be useful for monitoringwhat is going with retries on jobssendtime—Time this job was submitted YYYY-MM-DD HH:MM:SS formatcompletetime—Time this job was completed YYYY-MM-DD HH:MM:SS format, all0's if the job is pendingxmittime—Transmit time for this jobpagecount—Optional if the pagecount variable is POSTed. This willdisplay the number of pages in the jobcsid—Optional if the csid variable is POSTed. This will display the CSID(the fax machine identifier) for the station called, if availablelogin—Optional if the showlogin variable is POSTed. This will displaythe login of the credentials that sent each fax recordxmitpages—Optional if the xmitpages variable is POSTed. This willdisplay the number of pages actually transmitted (once the job iscompleted—it shows ‘0’ while the fax is in progress)

Distatus Operation Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘dlstatus’ (w/o the quotes) jobid The jobid to retrieve

Possible Responses

Response Meaning ERR01: Database connection failed Internal FAXAGE errorERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR06: No jobs todisplay or job id The jobid you passed was not found or there arespecified not found simply no jobs to report for your company at thistime ERR24: File is not yet converted Images can only be retrieved afterthe file(s) have actually been imaged (I.e.: The fax must either be InQueue or completed to be able to retrieve an image) ERR25: File does notexist This can be either an internal error, or if the status is a‘Failed Conversion’, then there is no image to retrieve <TIFF IMAGEDATA> In the successful case, a binary response of the TIFF image of thetransmitted fax is returned

DltransOperation Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘dltrans’ (w/o the quotes) jobid The jobid to retrieve

Possible Responses

Response Meaning ERR01: Database connection failed Internal FAXAGE errorERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR06: No jobs todisplay or job id The jobid you passed was not found or there arespecified not found simply no jobs to report for your company at thistime ERR24: File is not yet converted Images can only be retrieved afterthe file(s) have actually been imaged (I.e.: The fax must either be InQueue or completed to be able to retrieve an image) ERR25: File does notexist This can be either an internal error, or if the status is a‘Failed Conversion’, then there is no image to retrieve <PDF FILE> Inthe successful case, a binary response of a PDF, which is a transmittalpage is returned

Clear Operation

Clear will only clear records of completed jobs (presumably after theprogrammer has processed them using the status operation). Pending jobscannot be cleared through the API.

Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘clear’ (w/o the quotes) jobid The jobid to clear thestatus record for

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database connection failed Internal FAXAGE errorERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR07: Job ID:<jobid> not found, The jobid you passed was not found, is not a job doesnot belong to you or is for your company or is in a pending statepending and cannot be cleared yet <jobid> cleared Successful clear ofthe specified jobid ‘s status record ERR08: Unknown operation Eitheroperation is not correctly hard coded or the specified or bad POST <POSTPOST was bad, the POST contents are returned for contents> debuggingpurposes

Listfax Operation Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘listfax’ (w/o the quotes)

Optional POST Variables

Variable Description useronly Hardcode to ‘1’. If specified only showsfaxes that the currently passed credentials (if a non-manager account isbeing used) has access to from a website-security perspective. Thisallows automatic filtering on a per-user basis when using the API if itis desirable to control user access on the FAXAGE side versus buildingyour own capabilities to filter faxes into your application idascHardcode to ‘1’. Causes faxes to be listed in order by recvid (seelistfax record definition below) ascending. Recvid is an incrementednumeric field, so this is basically an ‘oldest to newest’ type oflisting. The default is to list by the receiving number, then by datereceived descending (‘newest to oldest’, grouped by receiving faxnumber) filename Hardcode to ‘1’. Causes a fifth returned column, whichcontains the internal filename associated with each received faxstarttime Hardcode to ‘1’. If set, causes the start time as well as thereceived time to be returned (the recvdate is the receive time in thereturn record, which is really the ‘end time’ of the transmission).Using this, incoming fax duration can be calculated as recvdate -starttime begin Set to a YYYY-MM-DD HH:MM:SS format string to list onlyfaxes received after the specified date/time idgt Set to a recvid inorder to list faxes only greater than the passed recvid. Recvid isalways unique and ascending, so sending the largest recvid you have seenso far ensures that you get only ‘new’ faxes that you have not yetlisted Pagecount If passed, will return the page count for each fax asthe last item in the record.

Possible Responses

Response Meaning ERR01: Database connection Internal FAXAGE error failedERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR11: No incomingfaxes There are no incoming faxes to list for you available <ListfaxRecord> The format of the listfax record(s) returned is as follows(newline separation if multiple records). See below for definition ofeach field: <recvid><tab><recvdate>(OPTIONAL: <tab><starttime>)<tab><CID><tab><DNIS>(OPTIONAL: <tab><filename>)(OPTIONAL:<tab><pagecount>) The ‘OPTIONAL’ return values above in parentheses haveto do with whether the ‘filename’ and/or ‘starttime’ optional variablesare passed. ERR08: Unknown operation Either operation is not correctlyhard coded or the specified or bad POST <POST POST was bad, the POSTcontents are returned for contents> debugging purposes

Definition of Listfax Record Fields

recvid—Numeric ID for this received faxrecvdate—Date/time fax was received YYYY-MM-DD HH:MM:SS formatstarttime—Date/time the phone was initially answered for the call inYYYY-MM-DD HH:MM:SS formatCID—Caller ID (XXX)XXX-XXXX format, will be ‘Unavailable’ if unavailableDNIS—The phone number the fax came in to (XXX)XXX-XXXX format. Usefulfor determining ‘who’ the fax is for if you have multiple phone numbersand use these to routefilename—The internal filename associated with this fax (e.g.:fax12345.pdf)pagecount—The number of pages in the fax

Getfax Operation

that faxes will be returned as either PDF's or TIFF's, depending on thesettings in the website under ‘Admin’->‘Fax Format’. The default is PDFunless changed.

Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘getfax’ (w/o the quotes) faxid The numeric ID of the faxto get, retrieved from the listfax operation

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database connection Internal FAXAGE error failedERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR12: FAX ID<faxid> not The faxid passed in is invalid or is an ID that does notfound or does not belong to you belong to your company ERR13: File couldnot be Internal FAXAGE error opened <filedata> Success condition.Headers will be content-type: application/octet-stream and disposition:attachment, a unique filename is also supplied in the headers. Theactual data returned will be the binary contents of the fax itself. Thislooks just like a website sending a file to a browser for Open or Savetype of operation. Depending on your company setup, the file will eitherbe a TIFF image or an Adobe PDF ERR08: Unknown operation Eitheroperation is not correctly hard coded or the specified or bad POST <POSTPOST was bad, the POST contents are returned for contents> debuggingpurposes

Delfax Operation Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘delfax’ (w/o the quotes) faxid The numeric ID of the faxto delete, obtained from listfax

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database connection Internal FAXAGE error failedERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR14: FAX ID<faxid> not The requested faxid either does not exist or is not a faxfound or does not belong to you belonging to your company <faxid>Deleted Success condition ERR08: Unknown operation Either operation isnot correctly hard coded or the specified or bad POST <POST POST wasbad, the POST contents are returned for contents> debugging purposes

Stopfax Operation

NOTE: Only faxes ‘In Queue’ or ‘Waiting for conversion’ that are notcurrently transmitting can be stopped.

Required POST Variables

Variable Description username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard coded to ‘stopfax’ (w/o the quotes) jobid The numeric ID of the faxto delete, obtained from listfax

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database connection Internal FAXAGE error failedERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR19: JOB ID<jobid> not The requested faxid either does not exist or is not a faxfound or does not belong to you belonging to your company <jobid>stopped Success condition ERR18: No jobid specified The ‘jobid’ variablewas not specified or did not contain a numeric job id ERR20: Job ID -<jobid> - is The jobid is not currently in an ‘In Queue’ or ‘Waiting notIn Queue for conversion’ status and, therefore, is ineligible to bestopped ERR21: Job ID - <jobid> - not The jobid is not on the fax serverat present and, found on fax server therefore, cannot be stopped. Thismay be indicative of an internal status error within FAXAGE ERR22: JobID - <jobid> - is in The jobid is currently being transmitted and,therefore, transmission cannot be stopped ERR23: Job ID - <jobid> -General failure to stop. The request is otherwise valid, failed to stopbut just didn't work ERR08: Unknown operation Either operation is notcorrectly hard coded or the specified or bad POST <POST POST was bad,the POST contents are returned for contents> debugging purposes

Disabledid Operation

‘Disabling’ a DID causes all calls to that DID to receive a fast-busysignal. Enabling a DID turns it back on for faxes to come in. All DIDsare enabled by default when initially set up on FAXAGE.

Required POST Variables

Variable Description Username Assigned FAXAGE username Company AssignedFAXAGE company credential Password Assigned FAXAGE password OperationHard coded to ‘disabledid’ (w/o the quotes) didnumber The 10-digit didto disable

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database connection Internal FAXAGE error failedERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR17: DID<didnumber> not The requested didnumber either does not exist or is notfound or doesn't belong to you a number belonging to your company ERR16:invalid DID number - The value of the ‘didnumber’ variable is not a10-digit <didnumber> number or was not specified Disabled <didnumber>Success condition ERR08: Unknown operation Either operation is notcorrectly hard coded or the specified or bad POST <POST POST was bad,the POST contents are returned for contents> debugging purposes

Enabledid Operation

‘Disabling’ a DID causes all calls to that DID to receive a fast-busysignal. Enabling a DID turns it back on for faxes to come in. All DIDsare enabled by default when initially set up on FAXAGE.

Required POST Variables

Variable Description Username Assigned FAXAGE username Company AssignedFAXAGE company credential Password Assigned FAXAGE password OperationHard coded to ‘enabledid’ (w/o the quotes) didnumber The 10-digit did toenable

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database connection Internal FAXAGE error failedERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ERR17: DID<didnumber> not The requested didnumber either does not exist or is notfound or doesn't belong to you a number belonging to your company ERR16:invalid DID number - The value of the ‘didnumber’ variable is not a10-digit <didnumber> number or was not specified Enabled <didnumber>Success condition ERR08: Unknown operation Either operation is notcorrectly hard coded or the specified or bad POST <POST POST was bad,the POST contents are returned for contents> debugging purposes

Portable Operation

This allows for checking a number against FAXAGE's rate center databaseto find out if it is portable to FAXAGE. What this actually checks is tosee if the number is in a rate center we service.

Required POST Variables

Variable Description Username Assigned FAXAGE username Company AssignedFAXAGE company credential Password Assigned FAXAGE password OperationHard coded to ‘portable’ (w/o the quotes) didnumber The 10-digit did tocheck

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database connection Internal FAXAGE error failedERR02: Login incorrect One or more of username, company, password isincorrect or your account is disabled for some reason ‘0’ or ‘1’ Successcondition - 1 indicates portable, 0 indicates not portable ERR08:Unknown operation Either operation is not correctly hard coded or thespecified or bad POST <POST POST was bad, the POST contents are returnedfor contents> debugging purposes

Listlines Operation

This allows for listing all lines currently assigned to your account.

Required POST Variables

Variable Description Username Assigned FAXAGE username Company AssignedFAXAGE company credential Password Assigned FAXAGE password OperationHard coded to ‘listlines’ (w/o the quotes)

Optional POST Variables

None

Possible Responses

Response Meaning ERR01: Database Internal FAXAGE error connection failedERR02: Login One or more of username, company, password is incorrectincorrect or your account is disabled for some reason List of linesSuccess condition - a newline-separated list of 10- digit numbersassigned to your account is returned ERR08: Unknown Either operation isnot correctly hard coded or the operation specified POST was bad, thePOST contents are returned for or bad POST debugging purposes <POSTcontents>The getcdr.php URL

The getcdr.php URL provides an interface that allows for pulling calldetail records from the FAXAGE system. This can be used by serviceproviders for generating downstream billing or by clients who wish tohave realtime CDR access for internal purposes (chargeback, accountingor usage monitoring, for example).

The getcdr.php functionality works by sending an HTTPS POST tohttps://www.faxage.com/getcdr.php with the following variables in thePOST.

Required POST Variables

Variable Name Value Username Assigned FAXAGE username Company AssignedFAXAGE company credential Password Assigned FAXAGE password

Optional POST Variables

NOTE: Although these parameters show as optional, one of the below twooptions *must* be specified (otherwise, nothing will be returned):

-   -   Both begin and end    -   ‘nuidgt’ (generally used in conjunction with ‘nuidshow’)

Variable Name Value Begin Timestamp in YYYY-MM-DD HH:MM:SS format fromwhich records are to begin End Timestamp in YYYY-MM-DD HH:MM:SS formatfrom which records are to end Nuidshow Utilized with the ‘nuidgt’variable, this one shows the optional numeric unique ID for each calldetail record (which can then be specified using the nuidgt variable forsubsequent queries). Hardcode this to ‘1’ to use Nuidgt Numeric uniqueID for which only records greater than the value passed should bereturned. Should be set to the highest prior numeric unique id that wasreturned, as these are always numerically incremented over timeSuccessful Return Values for the getcdr.php URL

The return record format looks like this if nuidshow is not set(begin/end are used). Records are newline-separated and comma-delimitedwithin each record:

calldate,direction,src,dst,duration

If nuidshow is set to ‘1’, then the format looks like this:

nuid,calldate,direction,src,dst,duration

Where:

Nuid—Numeric unique IDCalldate—date/time of call start in YYYY-MM-DD HH:MM:SS formatDirection—One of ‘IN’ for inbound calls or ‘OUT’ for outbound callsSrc—The ‘source’ of the call. Caller ID number, basicallyDst—The ‘destination’ of the call. For outbound, this is the dialednumber and for inbound this is the receiving fax numberDuration—Billable call duration (pickup to hangup) in seconds for thiscall record. Note, this is the raw billable duration and is not roundedto 6 second increments

In either case, records are ascending-sorted by calldate.

Possible Error Responses for the getcdr.php URL

Response Meaning ERR01: database connection Internal FAXAGE error failedERR02: login incorrect One or more of username, company or password isinvalid or the account is currently locked outThe provision.php URL

The provision.php URL provides an interface that allows for assigningfax numbers from the FAXAGE system to your account. All numbers areprovisioned as ‘virtual numbers’ tied to your account. This can be usedby service providers or larger clients looking to automate numberprovisioning for end-users.

The provision.php functionality works by sending an HTTPS POST tohttps://www.faxage.com/provision.php. The following are the basic modesof operation:

-   -   ‘listac’ returns a list of area codes in which numbers are        available for provisioning    -   ‘listnpanxx’ returns a list of NPANXX's (first 6 digits of the        phone number) in which numbers are available for provisioning    -   listdids' returns a list of available DIDs for provisioning    -   ‘provdid’ provisions a specific DID to your account    -   ‘deprovdid’ de-provisions (removes) a specific DID from your        account

A typical workflow (if using this for user self-signup), might be:

-   -   1. Call listac and give the user a list of area codes    -   2. User picks an area code    -   3. Call listnpanxx and give the user a list of localities within        the area code they picked    -   4. User picks an NPANXX    -   5. Call listdids and give the user a list of DID's they can        choose from    -   6. User picks a DID    -   7. Call provdid and provision the selected DID to your account        on the user's behalf        Possible Error Responses for the provision.php URL

These responses apply to all possible operations. Operation specificerror responses and success cases are documented under each operationseparately.

Response Meaning ERR01: database connection Internal FAXAGE error failedERR02: login incorrect One or more of username, company or password isinvalid or the account is currently locked out ERR03: unknown operationThe ‘operation’ variable is not specified or does have one of the validoperations as its value

The Listac Operation

This operation lists available area codes for provisioning.

Required POST Variables

Variable Name Value username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard code to ‘listac’

Optional POST Variables

None

Possible Return Values

A newline separated list of area codes in which the system has DID'savailable for provisioning. E.g.:

202303415. . .

The Listnpanxx Operation

This operation lists NPANXX's (first six digits of a phone number)available for provisioning.

Required POST Variables

Variable Name Value username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard code to ‘listnpanxx’

Optional POST Variables

Variable Name Value ac If passed and set to an area code, the returnednpanxx list will only be for the area code passed (the default, if thisvariable is not passed, is to return all npanxx's available)

Possible Return Values

A list of npanxx's in which the system has DID's available forprovisioning or nothing if the ‘ac’ value was passed and it is not anArea Code in which DID's are available.

The return records are newline separated and are in the followingformat:

<npanxx><tab><rcname><tab><rcstate>

Where:

npanxx—The first six digits of a telephone numberrcname—The Ratecenter name associated with this NPANXX (locality, like‘Denver’ or ‘San Francisco’, etc.)restate—The state in which the Ratecenter is located for this NPANXX

Note that for toll-free DID's, both rcname and restate will be‘Toll-Free’

An example returned value would be:

303991<tab>Denver<tab>CO

The Listdids Operation

This operation lists DID's (full telephone numbers) available forprovisioning.

Required POST Variables

Variable Name Value username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard code to ‘listdids’

Optional POST Variables

Variable Name Value ac Set to an area code (three digits), this willcause the list to only contain DIDs in the specified area code (all DIDsare returned by default) npanxx Set to an NPANXX (six digits), this willcause the list to only contain DIDs in the specified NPANXX (all DIDsare returned by default). Also, npanxx will override area code if bothare passed, because it is more specific

Possible Return Values

A newline separated list of DIDs (full telephone numbers) available forprovisioning, for example:

303555121230355512343035551111. . .

The Provdid Operation

This operation provisions a DID (adds a telephone number to youraccount).

Required POST Variables

Variable Name Value username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard code to ‘provdid’ didnumber The 10-digit number to provision

Optional POST Variables

None

Possible Return Values

Return Value Meaning ERR04: Invalid DID number, The ‘didnumber’ variablewas not set <didnumber> to a 10-digit number ERR05: <didnumber> doesEither you have specified a DID not appear to be available that doesn'texist or it is already assigned to someone and is not available forprovisioning <didnumber> provisioned This is the successful responsecase

The Deprovdid Operation

This operation de-provisions a DID (removes a telephone number from youraccount).

Required POST Variables

Variable Name Value username Assigned FAXAGE username company AssignedFAXAGE company credential password Assigned FAXAGE password operationHard code to ‘deprovdid’ didnumber The 10-digit number to de-provision

Optional POST Variables

None

Possible Return Values

Return Value Meaning ERR04: Invalid DID number, The ‘didnumber’ variablewas not set to a <didnumber> 10-digit number ERR05: <didnumber> is The‘didnumber’ either doesn't exist or is invalid or does not belong notcurrently assigned to your account to you <didnumber> deprovisioned Thisis the successful response case

What is claimed is:
 1. A method of delivering fax messages, the methodcomprising: receiving, at an initial submission gateway device of anInternet fax system, a request to deliver a fax message to one or morethird parties; causing to be stored, by the initial submission gatewaydevice, one or more source files associated with the request andrepresenting at least a portion of content to be included as part of thefax message to a shared storage area of the Internet fax systemaccessible by a plurality of imaging systems and a plurality of faxprocessing resources of the Internet fax system; for each imaging systemof the plurality of imaging systems, calculating a load score based onone or more of a processor load associated with the imaging system and amemory load associated with the imaging system; selecting an imagingsystem of the plurality of imaging systems to convert the one or moresource files into a digital representation suitable for faxing based ontheir respective load scores; and converting, by the selected imagingsystem, the one or more source files into the digital representation,associating the digital representation with an outbound fax job andcausing the fax message to be delivered to the one or more third partiesby submitting the outbound fax job to a fax modem of the plurality offax processing resources.
 2. The method of claim 1, further comprisingprior to said causing to be stored, by the initial submission gatewaydevice, one or more source files associated with the request, validatingthat the request has been submitted by a valid and active user accountassociated with a valid and active subscriber account of the Internetfax server.
 3. The method of claim 1, further comprising selecting thefax modem based on subscribed capacity of simultaneous outbound fax jobsassociated with the subscriber account.
 4. The method of claim 3,wherein said selecting the fax modem based on subscribed capacitycomprises, if the subscriber account is below the subscribed capacity,then selecting the fax modem as a result of the fax modem having a leastnumber of jobs pending amongst all fax modems of the plurality of faxprocessing resources.
 5. The method of claim 3, wherein said selectingthe fax modem based on subscribed capacity comprises, if the subscriberaccount is already at the subscribed capacity, then selecting the faxmodem as a result of the fax modem having a least number of jobs pendingamongst fax modems of the plurality of fax processing resources that arecurrently processing a prior outbound fax job associated with thesubscriber account.
 6. The method of claim 1, further comprisingensuring equal access by a plurality of subscribers of the Internet faxsystem to a plurality of simultaneous job slots provided within each ofthe plurality of imaging systems, by favoring for assignment to anavailable job slot of the plurality of simultaneous job slots those ofthe pending work requests, by a particular imaging system of theplurality of imaging systems, that are associated with a subscriberother than one for which the particular imaging system is currentlyprocessing.
 7. The method of claim 1, further comprising: determining,by a private branch exchange (PBX), whether a specific caller ID numberhas been requested for the outbound fax job; and if said determining soindicates, then presenting the specific caller ID on an outgoing callleg of a fax call conveying the fax message to a third party of the oneor more third parties.
 8. The method of claim 1, further comprisingcausing a fax server with which the fax modem is associated to configureone or more fax capabilities based on a destination number associatedwith the outbound fax job.
 9. A method of delivering fax messages, themethod comprising: for each of a plurality of imaging systems of anInternet fax system, calculating a load score based on one or more of aprocessor load associated with the imaging system and a memory loadassociated with the imaging system; and responsive to receiving, at aninitial submission gateway device of a plurality of initial submissiongateway devices, a request to deliver a fax message to one or more thirdparties, selecting, by the initial submission gateway device, an imagingsystem of the plurality of imaging systems based on their respectiveload scores, to convert one or more source files associated with therequest and representing at least a portion of content to be included aspart of the fax message into a digital representation suitable forfaxing; and causing the fax message to be delivered to the one or morethird parties by associating the digital representation with an outboundfax job and submitting the outbound fax job to a fax modem of aplurality of fax processing resources of the Internet fax system. 10.The method of claim 9, further comprising prior to said selecting, bythe initial submission gateway device, an imaging system of theplurality of imaging systems, validating that the request has beensubmitted by a valid and active user account associated with a valid andactive subscriber account of the Internet fax server.
 11. The method ofclaim 9, further comprising selecting the fax modem based on subscribedcapacity of simultaneous outbound fax jobs associated with thesubscriber account.
 12. The method of claim 9, further comprisingensuring equal access by a plurality of subscribers of the Internet faxsystem to a plurality of simultaneous job slots provided within each ofthe plurality of imaging systems, by favoring for assignment to anavailable job slot of the plurality of simultaneous job slots pendingwork requests, by a particular imaging system of the plurality ofimaging systems, that are associated with a subscriber other than onefor which the particular imaging system is currently processing.
 13. Themethod of claim 10 further comprising: determining, by a private branchexchange (PBX), whether a specific caller ID number has been requestedfor the outbound fax job; and if said determining so indicates, thenpresenting the specific caller ID on an outgoing call leg of a fax callconveying the fax message to a third party of the one or more thirdparties.
 14. A method of delivering fax messages, the method comprising:for each imaging system of a plurality of imaging systems of an Internetfax system, calculating a load score based on one or more of a processorload associated with the imaging system and a memory load associatedwith the imaging system; responsive to receiving fax requests to deliverfax messages, at one or more initial submission gateway devices from aplurality of subscribers of the Internet fax system, generating, by theone or more initial submission gateway devices, work requestscorresponding to the fax requests, the work requests each containinginformation identifying a selected imaging system of the plurality ofimaging systems to convert one or more source files associated with thefax requests into digital representations suitable for faxing, whereinthe selected imaging system is selected from among the plurality ofimaging systems based on their respective load scores; ensuring equalaccess by the plurality of subscribers to a plurality of simultaneousjob slots provided within each of the plurality of imaging systems, byfavoring for assignment to an available job slot of the plurality ofsimultaneous job slots those of the work requests, by a particularimaging system of the plurality of imaging systems, that are associatedwith a subscriber other than one for which the particular imaging systemis currently processing; and after completing processing of workrequests by the particular imaging system, associating the digitalrepresentations with outbound fax jobs and causing the fax messages tobe delivered by submitting the outbound fax jobs to one or more faxmodems of a plurality of fax processing resources of the Internet faxsystem.
 15. The method of claim 14, further comprising prior to saidgenerating, by the one or more initial submission gateway devices, workrequests corresponding to the fax requests, validating that the faxrequests have been submitted by valid and active user accountsassociated with valid and active subscriber accounts of the Internet faxserver.
 16. The method of claim 14, further comprising: determining, bya private branch exchange (PBX), whether specific caller ID numbers havebeen requested for the outbound fax jobs; and if said determining soindicates, then presenting the specific caller ID numbers on outgoingcall legs of fax calls carrying the fax messages.
 17. The method ofclaim 14, further comprising configuring one or more fax capabilities ofthe one or more fax modems based on destination numbers associated withthe outbound fax jobs.